package com.hoe.tsb.fraft.client.role;

import com.hoe.tsb.fraft.event.msg.FRaftMessage;

/**
 * <p>
 * FRaft的角色抽象
 * </p>
 *
 * @author hoe
 * @version 1.0
 * @date 2022/11/28
 */
public interface Role {

    /**
     * 处理收到的FRaftMessage
     * @param msg 消息体
     * @return true消费成功且阻断冒泡，false表示消费不成功或者不阻断冒泡
     */
    boolean handleMessage(FRaftMessage msg);

    /**
     * 定时器时间到<br/>
     * 根据角色处理相应的逻辑，如Follower就需要启动新的定时器切换为Candidate
     */
    void onTimeout();

    /**
     * 当角色切换时触发的回调
     */
    void onRoleTurn();

}
